#ifndef __MATRIZ_H__
#define __MATRIZ_H__

#include <iostream>
#include "Casillero.h"
using namespace std;

/*
la instancia de esta clase no realizara llamadas a excepciones por que 
las mismas las tiene que tratar la Grilla, es mas es poco probabable que 
se tengas que aplicar excepciones a esta estructura contenedora, creo.
*/

class Matriz{

private:
	int ancho;
	int alto;
	int** matriz;
	
public:

	/*
	se construye la matriz segun el ancho y el alto pasados por parametro
	*/
	Matriz(int ancho, int alto){
	this->ancho = ancho;
	this->alto = alto;
	this->matriz = new int*[alto];
	/*se reserva memoria para la matriz*/
	for( int i = 0; i < this->ancho; i++)
		this->matriz[i] = new int[ancho];
	}

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
	/*
	libera los recursos utilizados
	*/
	~Matriz(){
       for (int i = 0;i < this->ancho; i++)
              delete []matriz[i];
	   delete []matriz;

    }

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
	/*
	pre: los valores pasados por parametro deben pertenecer a los limites de la matriz
	post: devuelve un elemento de la matriz segun los valores pasados por parametro
	*/
	int getElemento(int fila, int columna){
	
		return *(matriz[fila] + columna);
	}

	/*
	pre: los valores pasados por parametro deben pertenecer a los limites de la matriz
	post: setea una posicion de la matriz segun los valores pasados por parametro
	*/

	void Matriz::setElemento(int fila, int columna, int elemento){
		
		*(matriz[fila] + columna) = elemento;
	}


	void imprimir(){

	}
};

#endif